perm filename ERROR[NS,SYS] blob
sn#118929 filedate 1974-09-10 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00007 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 ERROR--The file DEFS must be assembled with this file.
C00003 00003 DATA
C00005 00004 ERROR
C00009 00005 WRITE OUT NEW ERROR FILE
C00011 00006 SEND ME A MESSAGE
C00015 00007 SIXOUT DECOUT OCTOUT ASCOUT PUT2DG PT2DG1 UUCODE
C00017 ENDMK
C⊗;
;ERROR--The file DEFS must be assembled with this file.
TITLE ERROR handler for News Service system
IFNDEF DEBUG,<DEBUG←←0>
F←0
A←1
B←2
C←3
D←4
E←5
L←6
M←7
N←10
Q←11
R←12
W←13
X←14
Y←15
Z←16
P←17
;DATA
;XWIRES DEFINES NWIRES AND WIRES (FROM DEFS)
XWIRES
CMD: 0↔0 ;DUMP MODE INPUT/OUTPUT COMMANDS GO HERE
ERRORF: SIXBIT /ERRORS/
SIXBIT /TXT/
0↔0
TT1: SIXBIT /CTY/
[ASCIZ /
ππNEWS SERVICE TROUBLEππ
/]
TT2: SIXBIT /CTY/
BUF
TT3: SIXBIT /CTY/
[ASCIZ/
/]
PTY: BLOCK 2
LPDL←←30
PDL: BLOCK LPDL
TMPBUF: BLOCK 200 ;pty input and partial old record from error file goes here
BUF: BLOCK 200 ;error message goes here
WAKEBK: SIXBIT /[-NS-]/
SIXBIT / NSSYS/
0
MONTH:
FOR MON IN (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)
{ ASCIZ /MON-/
}
;ERROR
ERROR: EXIT ;STARTED UP BY RUN COMMAND
;EXPECT PROGRAM NAME IN AC 1, UUO IN AC 2, WIRE CODE IN AC 0
MOVEM 0,WIRCOD#
MOVEM A,PRGNAM#
MOVEM B,UUO#
MOVE P,[IOWD LPDL,PDL]
MOVE Q,[POINT 7,BUF] ;BYTE POINTER FOR BUILDING MESSAGE
ACCTIM D, ;GET <DATE>,,<TIME IN SECS>
HLRZ A,D ;GET DATE
IDIVI A,=31 ;DAY INTO B, MONTHS IN A
PUSHJ P,PT2DG1 ;PRINT DAY OF MONTH AS 2 DIGITS
MOVEI C,"-"
IDPB C,Q
IDIVI A,=12 ;MONTH INTO B, YEAR INTO A
MOVEI B,MONTH(B) ;PTR TO ASCIZ MONTH
PUSHJ P,ASCOUT ;PRINT MONTH AS 3 CHARS FOLLOWED BY DASH
MOVEI B,=64(A) ;YEAR
PUSHJ P,PUT2DG
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVEI A,(D) ;TIME IN SECS
IDIVI A,=60 ;CONVERT TO MINS
HRR D,A ;(SAVE TIME IN MINS FOR WAKEME)
IDIVI A,=60 ;HOURS IN A, MINS IN B
EXCH A,B ;HOURS IN B, MINS IN A
PUSHJ P,PUT2DG ;PRINT HOURS
MOVEI B,(A)
PUSHJ P,PUT2DG ;PRINT MINUTES
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVE B,PRGNAM
PUSHJ P,SIXOUT ;PRINT NAME OF PROGRAM GETTING ERROR
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVE A,WIRCOD
SETZ B,
JUMPL A,.+3
CAIGE A,NWIRES ;REASONABLE WIRE CODE HERE?
MOVE B,WIRES(A) ;YES
PUSHJ P,SIXOU3 ;PRINT 3 CHARS
MOVEI C," "
IDPB C,Q
IDPB C,Q
MOVS A,UUO ;PICK UP UUO
ANDI A,777000 ;CLEAR ALL BUT OPCODE
MOVE B,['ERRORS'] ;FILENAME FOR ERROR MESSAGE
CAIN A,(<UWARN>) ;WARNING MESSAGES GO IN DIFFERENT FILE
MOVE B,['WARNGS']
MOVEM B,ERRORF ;SET NAME OF ERROR MESSAGE FILE
MOVE B,['MISC ']
CAIE A,(<UDELAY>)
CAIN A,(<UFATAL>)
MOVE B,['FATAL ']
CAIN A,(<UWARN>)
MOVE B,['WARN ']
PUSHJ P,SIXOUT ;PRINT TYPE OF ERROR
MOVE B,['ERROR ']
PUSHJ P,SIXOUT
HRRZ B,UUO ;PICK UP ERROR NUMBER
PUSHJ P,OCTOUT ;AND PRINT IT
CAIE A,(<UDELAY>)
JRST NOWAKE
MOVEI B,[ASCIZ /--WILL TRY AGAIN IN /]
PUSHJ P,ASCOUT
LDB B,[POINT 4,UUO,12] ;PICK UP AMT OF DELAY (AC FIELD OF UUO)
JUMPN B,.+2
SKIPA B,[=30] ;DEFAULT DELAY IS 30 MINUTES
IMULI B,=5 ;AC FIELD GIVES DELAY IN UNITS OF 5 MINUTES EACH
ADDI D,(B) ;ADD DELAY TO CURRENT TIME
PUSHJ P,DECOUT ;PRINT DELAY LENGTH
MOVEI B,[ASCIZ / MINS./]
PUSHJ P,ASCOUT
MOVEI A,=60*=24 ;NUMBER OF MINUTES IN A DAY
CAIG A,(D) ;DELAYING PAST MIDNIGHT?
SUB D,[-1,,=60*=24] ;YES, MAKE IT 24 HRS EARLIER ON NEXT DAY
MOVEM D,WAKEBK+2
MOVEI A,WAKEBK
WAKEME A,
JFCL
NOWAKE: MOVEI C,CR
IDPB C,Q
MOVEI C,LF
IDPB C,Q
SETZ C,
IDPB C,Q
;WRITE OUT NEW ERROR FILE
INIT 0,217
SIXBIT /DSK/
0
JRST TRYPTY
MOVE A,[ERRORF,,W]
BLT A,Z
LOOKUP 0,W
JRST NOLOOK
MOVS A,Z ;NEGATIVE WORD COUNT
ERR0: MOVEM A,GOODLK# ;FLAG: NON-ZERO MEANS LOOKUP SUCCEEDED
SETZB Z,Y
ENTER 0,W
JRST TRYPTY
MOVN A,A ;POSITIVE WORD COUNT
SETZ B,
LSHC A,-7
JUMPE B,ERR2 ;ANY PARTIAL RECORD WE SHOULD COPY?
ROT B,7 ;YES
MOVN B,B ;NEGATIVE WORD COUNT FOR INPUT OPERATION
HRLI B,BUF-1(B) ;ADDRESS FOR INPUT
MOVSM B,CMD ;DUMP MODE COMMAND
USETI 0,1(A)
IN 0,CMD ;READ IN PARTIAL RECORD
JRST ERR1
JRST TRYPTY
NOLOOK: TRNE X,-1 ;NON EX FILE?
EXIT ;NO, GIVE UP
;HERE IS WHERE WE TELL THE CTY THERE IS TROUBLE
IFE DEBUG, <
MOVEI A,TT1
TTYMES A,
JFCL
MOVEI A,TT2
TTYMES A,
JFCL
MOVEI A,TT3
TTYMES A,
JFCL
>;END ¬DEBUG
SETZ A,
JRST ERR0
ERR2: MOVEI B,BUF-1
MOVEM B,CMD ;SET UP OUTPUT ADDRESS FOR DUMP MODE COMMAND
ERR1: USETO 0,1(A) ;RECORD FOR OUTPUT TO COME
SUB Q,CMD ;SUBTRACT INITIAL ADDRESS FROM FINAL ADDRESS
MOVNI Q,(Q) ;NEGATIVE OUTPUT WORD COUNT
HRLM Q,CMD
OUTPUT 0,CMD
TRYPTY: RELEAS 0,
;SEND ME A MESSAGE
PTYGET PTY
EXIT
MOVEI A,5 ;LOGIN PTJOBX CODE
MOVEM A,PTY+1
PTJOBX PTY ;LOGIN IN THE PTY
EXIT
MOVEI A,3 ;DOFF PTJOBX CODE
MOVEM A,PTY+1
PTJOBX PTY ;TURN OFF ECHOING
MOVEI A,[ASCIZ \SEND\]
MOVEM A,PTY+1
PTWRS7 PTY ;SEND AND MAIL ME THE ERROR MESSAGE
MOVEI A,[ASCIZ\/M ME \]
SKIPE GOODLK#
MOVEI A,[ASCIZ\ ME \] ;ERROR FILE ALREADY EXISTS, DON'T DO MAIL
MOVEM A,PTY+1
PTWRS7 PTY
MOVEI A,TMPBUF
MOVEM A,PTY+1
PTRDS PTY ;READ FROM PTY
MOVEI A,BUF
MOVEM A,PTY+1
PTWRS7 PTY ;SEND AND MAIL ME THE ERROR MESSAGE
MOVEI C,=60 ;NUMBER OF SECS WE WILL WAIT FOR PTY TO FINISH
MOVEI B,1
FINPTY: SLEEP B,
PTOCNT PTY
SKIPN PTY+1 ;ANY CHARS WAITING FOR US
JRST FINPT1 ;NO
MOVEI A,TMPBUF
MOVEM A,PTY+1
PTRDS PTY ;READ FROM PTY
FINPT1: MOVEI A,6
MOVEM A,PTY+1
PTJOBX PTY ;SKIP IF PTY WAITING FOR INPUT
SOJG C,FINPTY
PTYREL PTY
EXIT
;SIXOUT DECOUT OCTOUT ASCOUT PUT2DG PT2DG1 UUCODE
SIXOU3: SKIPA W,[3] ;PRINT 3 SIXBIT CHARS
SIXOUT: MOVEI W,6
SIXOU1: SETZ C,
ROTC B,6 ;CHAR INTO C
ADDI C,40 ;MAKE INTO ASCII
IDPB C,Q
SOJG W,SIXOU1
POPJ P,
OCTOUT: IDIVI B,=8
HRLM C,(P)
JUMPE B,.+2
PUSHJ P,OCTOUT
HLRZ C,(P)
ADDI C,"0"
IDPB C,Q
POPJ P,
DECOUT: IDIVI B,=10
HRLM C,(P)
JUMPE B,.+2
PUSHJ P,DECOUT
HLRZ C,(P)
ADDI C,"0"
IDPB C,Q
POPJ P,
ASCOUT: TLOA B,440700 ;MAKE A BYTE PTR
IDPB C,Q
ILDB C,B
JUMPN C,.-2
POPJ P,
PT2DG1: ADDI B,1
PUT2DG: IDIVI B,=10
ADDI B,"0"
IDPB B,Q
ADDI C,"0"
IDPB C,Q
POPJ P,
UUCODE: 0 ;CAUSE AN ILLEGAL UUO IF USER UUO EXECUTED
END ERROR